package com.smart.community.commons.entity.property;

import java.time.LocalDateTime;
import java.util.List;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.smart.community.commons.base.BaseEntity;
import com.smart.community.commons.dto.FileInfoDTO;
import com.smart.community.commons.utils.FileInfoUtils;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 物业公司实体类
 * @author Wu.Liang
 * @since 2024-12-19
 * @version 1.0.0
 */
@Data
@TableName("sc_property_company")
@EqualsAndHashCode(callSuper=false)
public class PropertyCompany extends BaseEntity {
	private static final long serialVersionUID = -848084846443432297L;
    /**
     * 物业公司名称
     */
    @TableField("company_name")
    private String companyName;
    
    /**
     * 物业公司编码
     */
    @TableField("company_code")
    private String companyCode;
    
    /**
     * 统一社会信用代码
     */
    @TableField("credit_code")
    private String creditCode;
    
    /**
     * 法定代表人
     */
    @TableField("legal_representative")
    private String legalRepresentative;
    
    /**
     * 联系人
     */
    @TableField("contact_person")
    private String contactPerson;
    
    /**
     * 联系电话
     */
    @TableField("contact_phone")
    private String contactPhone;
    
    /**
     * 联系邮箱
     */
    @TableField("contact_email")
    private String contactEmail;
    
    /**
     * 邮箱地址
     */
    @TableField("email")
    private String email;
    
    /**
     * 公司地址
     */
    @TableField("address")
    private String address;
    
    /**
     * 公司简介
     */
    @TableField("description")
    private String description;
    
    /**
     * 营业执照号
     */
    @TableField("business_license")
    private String businessLicense;
    
    /**
     * 成立日期
     */
    @TableField("established_date")
    private LocalDateTime establishedDate;
    
    /**
     * 注册资本（万元）
     */
    @TableField("registered_capital")
    private Double registeredCapital;
    
    /**
     * 服务范围
     */
    @TableField("service_scope")
    private String serviceScope;
    
    /**
     * 服务区域
     */
    @TableField("service_area")
    private String serviceArea;
    
    /**
     * 服务社区数
     */
    @TableField("service_community_count")
    private Integer serviceCommunityCount;
    
    /**
     * 服务户数
     */
    @TableField("service_household_count")
    private Integer serviceHouseholdCount;
    
    /**
     * 服务面积（平方米）
     */
    @TableField("service_area_size")
    private Double serviceAreaSize;
    
    /**
     * 资质等级
     */
    @TableField("qualification_level")
    private String qualificationLevel;
    
    /**
     * 公司状态（1-正常，0-停用）
     */
    @TableField("status")
    private Integer status;
    
    /**
     * 审核状态（0-待审核，1-审核通过，2-审核拒绝）
     */
    @TableField("audit_status")
    private Integer auditStatus;
    
    /**
     * 审核备注
     */
    @TableField("audit_remark")
    private String auditRemark;
    
    /**
     * 审核人ID
     */
    @TableField("audit_by")
    private Long auditBy;
    
    /**
     * 审核时间
     */
    @TableField("audit_time")
    private LocalDateTime auditTime;
    
    /**
     * 排序号
     */
    @TableField("sort_order")
    private Integer sortOrder;
    
    /**
     * 收款二维码图片信息，JSON格式存储多个文件信息
     */
    @TableField("payment_qr_code")
    private String paymentQrCode;
    
    /**
     * 收款账户
     */
    @TableField("payment_account")
    private String paymentAccount;
    
    /**
     * 开户银行
     */
    @TableField("payment_bank")
    private String paymentBank;
    
    /**
     * 在线支付链接
     */
    @TableField("payment_link")
    private String paymentLink;
    
    /**
     * 微信支付商户号
     */
    @TableField("wechat_pay_merchant_id")
    private String wechatPayMerchantId;
    
    /**
     * 支付宝商户号
     */
    @TableField("alipay_merchant_id")
    private String alipayMerchantId;
    
    /**
     * 公司Logo图片信息，JSON格式存储多个文件信息
     */
    @TableField("company_logo")
    private String companyLogo;
    
    /**
     * 公司简介
     */
    @TableField("introduction")
    private String introduction;
    
    /**
     * 营业时间
     */
    @TableField("business_hours")
    private String businessHours;
    
    /**
     * 服务热线
     */
    @TableField("service_hotline")
    private String serviceHotline;
    
    /**
     * 备注
     */
    @TableField("remark")
    private String remark;
    
    /**
     * 是否删除：0-否，1-是
     */
    @TableField("deleted")
    private Integer deleted;
    
    /**
     * 版本号
     */
    @TableField("version")
    private Integer version;
    
    /**
     * 创建人
     */
    @TableField("create_by")
    private Long createBy;
    
    /**
     * 创建时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;
    
    /**
     * 更新人
     */
    @TableField("update_by")
    private Long updateBy;
    
    /**
     * 更新时间
     */
    @TableField("update_time")
    private LocalDateTime updateTime;

    // ==================== 文件处理工具方法 ====================

    /**
     * 获取公司Logo文件列表
     * 
     * @return 公司Logo文件列表
     */
    public List<FileInfoDTO> getCompanyLogoFiles() {
        return FileInfoUtils.fromJsonString(companyLogo);
    }

    /**
     * 设置公司Logo文件列表
     * 
     * @param fileInfoList 文件信息列表
     */
    public void setCompanyLogoFiles(List<FileInfoDTO> fileInfoList) {
        this.companyLogo = FileInfoUtils.toJsonString(fileInfoList);
    }

    /**
     * 获取第一个公司Logo URL（兼容旧数据）
     * 
     * @return 第一个公司Logo URL
     */
    public String getFirstCompanyLogoUrl() {
        return FileInfoUtils.getFirstFileUrlFromJson(companyLogo);
    }

    /**
     * 获取公司Logo文件数量
     * 
     * @return 文件数量
     */
    public int getCompanyLogoFileCount() {
        return FileInfoUtils.getFileCount(companyLogo);
    }

    /**
     * 检查是否有公司Logo文件
     * 
     * @return 是否有文件
     */
    public boolean hasCompanyLogoFiles() {
        return getCompanyLogoFileCount() > 0;
    }

    /**
     * 获取收款二维码文件列表
     * 
     * @return 收款二维码文件列表
     */
    public List<FileInfoDTO> getPaymentQrCodeFiles() {
        return FileInfoUtils.fromJsonString(paymentQrCode);
    }

    /**
     * 设置收款二维码文件列表
     * 
     * @param fileInfoList 文件信息列表
     */
    public void setPaymentQrCodeFiles(List<FileInfoDTO> fileInfoList) {
        this.paymentQrCode = FileInfoUtils.toJsonString(fileInfoList);
    }

    /**
     * 获取第一个收款二维码URL（兼容旧数据）
     * 
     * @return 第一个收款二维码URL
     */
    public String getFirstPaymentQrCodeUrl() {
        return FileInfoUtils.getFirstFileUrlFromJson(paymentQrCode);
    }

    /**
     * 获取收款二维码文件数量
     * 
     * @return 文件数量
     */
    public int getPaymentQrCodeFileCount() {
        return FileInfoUtils.getFileCount(paymentQrCode);
    }

    /**
     * 检查是否有收款二维码文件
     * 
     * @return 是否有文件
     */
    public boolean hasPaymentQrCodeFiles() {
        return getPaymentQrCodeFileCount() > 0;
    }
}
